package eu.jk.config;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * 配置，线程安全
 * 
 * @author wenjianwzz
 * 
 */
public class Config {
	/**
	 * 参数Map
	 */
	HashMap<String, String> parameters = new HashMap<String, String>();
	/**
	 * 配置名
	 */
	String configName=null;
	/**
	 * 所在的配置文件
	 */
	ConfigFile cf = null;

	/**
	 * Key列表
	 */
	List<String> keys=new ArrayList<String>();


	/**
	 * 取得键对应的值,如果不存在对应的值，抛出ConfigMissingException(key)
	 * @param key
	 * @return String
	 * @throws ConfigMissingException
	 * @see java.util.HashMap#get(Object)
	 */
	synchronized public String getValue(String key)
			throws ConfigMissingException {
		String value = null;
		value = parameters.get(key);
		if (value == null)
			throw new ConfigMissingException(key);
		return value;
	}

	/**
	 * 取得键对应的值,如果不存在对应的值，返回NULL
	 * 
	 * @param key
	 * @return String
	 * @see java.util.HashMap#get(Object)
	 */
	synchronized public String getValueNE(String key) {
		String value = null;
		value = parameters.get(key);
		return value;
	}

	/**
	 * 添加参数，会覆盖原有参数
	 * 
	 * @param key
	 * @param value
	 */
	synchronized void addParameters(String key, String value) {
		if(parameters.put(key, value)==null)
			keys.add(key);
	}

	/**
	 * @param cf
	 *            the cf to set
	 */
	synchronized void setConfigFile(ConfigFile cf) {
		this.cf = cf;
	}

	/**
	 * 获取配置名
	 */
	public synchronized String getConfigName() {
		return configName;
	}

	synchronized void setConfigName(String configName) {
		this.configName = configName;
	}

	Config(String configName) {
		this.configName = configName;
	}
	
	public List<String> getKeys(){
		return keys;
	}
}
